using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

using RRHH.Competencias.Entities;

namespace RRHH.Competencias.DataAccessLayer.Generic
{
    /// <summary>
    /// Estructura de persistencia a la que deben ajustarse los proveedores
    /// de acceso a datos para la clase Reporte Dinamico
    /// </summary>
    public interface IDALReporteDinamico
    {
        /// <summary>
        /// Obtiene las tablas disponibles para el reporte
        /// </summary>
        /// <returns>Listado con las tablas disponibles</returns>
        List<ReporteTabla> GetTablas();

        /// <summary>
        /// Obtiene los datos de una Tabla
        /// </summary>
        /// <param name="tabla">Tabla a completar</param>
        /// <returns>Datos disponibles sobre la tabla</returns>
        ReporteTabla CompletarTablaOrigen(ReporteTabla tabla);

        /// <summary>
        /// Obtiene las columnas disponibles para armar el reporte
        /// </summary>
        /// <param name="tabla">Tabla del cual se desean obtener las columnas</param>
        /// <returns>Listado con las columnas disponibles</returns>
        List<ReporteCampoColumna> GetColumnas(ReporteTabla tabla);

        /// <summary>
        /// Contruye y ejecuta la consulta a partir de los
        /// parametros indicados
        /// </summary>
        /// <param name="tabla">Fuente de datos donde se extraera la informacion</param>
        /// <param name="camposMostrar">Columnas del reporte</param>
        /// <param name="camposFiltro">Conjunto de filtros de busqueda</param>
        /// <returns>DatasTable conteniendo el resultado</returns>
        DataTable GetResultadoConsulta(ReporteTabla tabla, List<ReporteCampoColumna> camposMostrar, List<ReporteCriterioFiltro> camposFiltro);
    }
}
